package com.zx.zxpicture.infrstructure.utils;

import java.util.concurrent.ConcurrentHashMap;

/**
 * 用户编辑时使用
 * 防止用户多次点击编辑，发送多次同样的请求
 */
public class LockUtils {

        // 存储用户ID与锁状态（线程安全的Map）
        private static final ConcurrentHashMap<String, Boolean> UPLOAD_LOCKS = new ConcurrentHashMap<>();

        /**
         * 尝试获取非阻塞锁
         * @param userId 用户唯一标识
         * @return true-获取锁成功，false-已有操作进行中
         */
        public static boolean tryLock(String userId) {
            // putIfAbsent是原子操作：当key不存在时返回null，存在时返回当前值
            return UPLOAD_LOCKS.putIfAbsent(userId, Boolean.TRUE) == null;
        }

        /**
         * 释放锁
         * @param userId 用户唯一标识
         */
        public static void unlock(String userId) {
            UPLOAD_LOCKS.remove(userId);
        }

        // 私有构造方法防止实例化
        private LockUtils() {}
}
